#include "cmdHandle/CNetConfig.h"
#include "CControlManage.h"
#include "CConfig.h"

NETWORKSERVICE_BEGIN_NAMESPACE
// 单例运行
CNetConfig CNetConfig::m_Instance;



CNetConfig::CNetConfig()
:CNetBase(true, 10, 600, nullptr)
,m_devConfig(string(SP_CONFIG_PATH) + NET_CONFIG_FILE)
{
	m_netConfig = m_devConfig;
	ADD_CONTROL_CMD_TYPE("getNetConfig", CNetConfig::rGetConfig, string(), (T_NetConfig &)m_netConfig, false, true, true);
	ADD_CONTROL_CMD_TYPE("downNetConfig", CNetConfig::rDownConfig, (T_NetConfig &)m_netConfig, string(), true, false, true);
}

// 保存连接配置
void CNetConfig::__saveConfig()
{
	m_netConfig = m_devConfig;
	m_devConfig.toFlie(string(SP_CONFIG_PATH) + NET_CONFIG_FILE);
}

// 10分钟超时
void CNetConfig::timerOut()
{
    qDebug("timerOut()");
	sGetConfig();
}
// 获取设备运行模式(主动发起)
bool CNetConfig::sGetConfig()
{
	struct tRouteData<string> send;
	struct tRouteData<T_NetConfig &> recv = m_netConfig;

    send.msg.cmd = "getNetConfig";
    if(controlManage::request(NET_DEV_RUN_HTTP,&send, &recv)){

        if(recv.msg.code != NET_CODE_OK){
            qDebug(recv.msg.msg.c_str());
			return false;
		}
        qDebug("rDownConfig old:%s", m_netConfig.toJsonString().c_str());
        if(m_devConfig != m_netConfig){
			m_devConfig = m_netConfig;
            qDebug("save %s",m_netConfig.toJsonString().c_str());
            m_devConfig.toFlie(string(SP_CONFIG_PATH) + NET_CONFIG_FILE);
        }
		return true;
    }
	return false;
}

// 接收到获取连接配置命令(被动触发)  由 getConfig 命令触发
bool CNetConfig::rGetConfig(struct tRouteData<string> *recv,struct tRouteData<T_NetConfig &> *send, void *userData)
{
	send->msg.cmd = "downNetConfig";
    if(recv->msg.code != NET_CODE_OK){
        qDebug(recv->msg.msg.c_str());
		return false;
	}
	return true;
}

// 接收到下发连接配置命令(被动触发) 由 downConfig 命令触发
bool CNetConfig::rDownConfig(struct tRouteData<T_NetConfig &> *recv,struct tRouteData<string> *send, void *userData)
{
    qDebug("rDownConfig old:%s", m_netConfig.toJsonString().c_str());
    if(recv->msg.code != NET_CODE_OK){
        qDebug(recv->msg.msg.c_str());
		return true;
	}
    if(m_devConfig != m_netConfig){
		m_devConfig = m_netConfig;
        qDebug("save %s",m_netConfig.toJsonString().c_str());
		m_netConfig.toFlie(string(SP_CONFIG_PATH) + NET_CONFIG_FILE);
		if(recv->msg.recvMsgId.empty()){
			cmdHandleBase *cmdHandle = (cmdHandleBase *)userData;
			send->msg.cmd = "downNetConfigRtn";
			cmdHandle->retHandle(recv, send);
		}
        m_devConfig.toFlie(string(SP_CONFIG_PATH) + NET_CONFIG_FILE);
		return false;
    }
    // 主动get时不返回
    if(!(recv->msg.recvMsgId.empty())){
        return false;
    };
    send->msg.cmd = "downNetConfigRtn";
    return true;
}


NETWORKSERVICE_END_NAMESPACE
